Day 33-API & ISS Tracker


Posted by pei_______ on 2022-05-13

learning from 100 Days of Code: The Complete Python Pro Bootcamp for 2022


Requests Document - HTTP for Humans


What's API and How to get it?

An Application Programming Interface(API) is a set of commands, functions, protocols, and objects that programmers can use to create software or interact with an external system.

  1. fing API Endpoint & parameters if need
    ex. api.coinbase.com
  2. make request

    ex.
    parameters = {
         "lat": MY_LAT,
         "lng": MY_LONG,
         "formatted": 0,
     }
    
     response = requests.get("https://api.sunrise-sunset.org/json", params=parameters)
    
  3. get response code
    ex.
    response.raise_for_status()
    > HTTP situations:
    1XX: Hold on
    2XX: Here you go
    3XX: Go away
    4XX: You screwed up
    5XX: I screwed up
    

HTTP Status Codes Glossary


Kanye_quote

def get_quote():
    response = requests.get(url="https://api.kanye.rest")
    response.raise_for_status()
    kanye_quote = response.json()["quote"]
    if len(kanye_quote.split(" ")) > 18:
        canvas.itemconfig(quote_text, text=kanye_quote, font=("Arial", 20, "bold"))
    else:
        canvas.itemconfig(quote_text, text=kanye_quote)

ISS Tracker

import requests
from datetime import datetime
import smtplib
import time

MY_LAT = 22.620856
MY_LONG = 120.311922
MY_ADDRESS = YOUR ADDRESS
PASSWORD = YOUR PASSWORD


def is_overhead():
    response = requests.get(url="http://api.open-notify.org/iss-now.json")
    response.raise_for_status()
    data = response.json()
    iss_latitude = float(data["iss_position"]["latitude"])
    iss_longitude = float(data["iss_position"]["longitude"])

    return abs(iss_longitude - MY_LONG) <= 5 and abs(iss_latitude - MY_LAT)


def is_night():
    parameters = {
        "lat": MY_LAT,
        "lng": MY_LONG,
        "formatted": 0,
    }

    response = requests.get("https://api.sunrise-sunset.org/json", params=parameters)
    response.raise_for_status()
    data = response.json()

    sunrise = int(data["results"]["sunrise"].split("T")[1].split(":")[0]) - 16
    sunset = int(data["results"]["sunset"].split("T")[1].split(":")[0]) + 8

    time_now = datetime.now().hour

    return not time_now > sunrise and time_now < sunset


while True:
    time.sleep(60)
    if is_overhead() and is_night():
        with smtplib.SMTP("smtp.gmail.com") as connect:
            connect.starttls()
            connect.login(user=MY_ADDRESS, password=PASSWORD)
            connect.sendmail(from_addr=MY_ADDRESS,
                             to_addrs="TARGET ADDRESS",
                             msg="Subject:GET ISS!\n\nYou can see ISS now.")

#Python #課堂筆記 #100 Days of Code







Related Posts

MTR04 W2 D19 第二週作業

MTR04 W2 D19 第二週作業

Commend Line 速記

Commend Line 速記

Day 92

Day 92


Comments